[iOS] サウンドや動画素材をAsset Catalogで管理する
はじめに
こんにちは。モバイルアプリサービス部の平屋です。
本記事では、Asset Catalogでサウンド素材や動画素材を管理する方法を紹介します。
検証環境
- Xcode Version 8.2.1
- iPhone 6s, iOS 10.2.1
素材をAsset Catalogに追加する
画像を追加する場合と同じ手順で、サウンド素材や動画素材をAsset Catalogに追加できます。
素材をコードから使用する
サウンド素材の場合
iOS 9.0で追加されたNSDataAssetを介してAsset Catalog上の素材へアクセスすることができます。NSDataAssetは、Asset Catalog上のデータセット名(今回の場合は、"movie"や"sound")を指定して作成できます。
NSDataAssetのdataプロパティを使用すれば素材の生データ(Data型)にアクセスできます。
データとともにAVAudioPlayerを作成すればサウンド素材を再生できます。
@IBAction func didTapPlaySoundButton(_ sender: Any) { let asset = NSDataAsset(name:"sound") player = try! AVAudioPlayer(data:asset!.data, fileTypeHint:"m4a") player!.play() }
動画素材の場合
動画の場合もNSDataAssetを介して素材の生データを取得できます。
ただし、Data型のデータを受け付ける動画プレイヤークラスはなさそうなので(今回調べた限りでは)、一時的にファイルへ保存して、ファイルのURLをプレイヤーに渡す必要があると思います。
let asset = NSDataAsset(name:"movie") let videoUrl = URL(fileURLWithPath: NSTemporaryDirectory()).appendingPathComponent("movie.mp4") try! asset!.data.write(to: videoUrl) let item = AVPlayerItem(url: videoUrl) destination.player = AVPlayer(playerItem: item)
さいごに
Asset Catalogでサウンド素材や動画素材を管理し、コードから使用する方法を紹介しました。
サウンドや動画素材を多用するアプリなどの場合に便利そうだなと思いました!
今回解説したサンプルコードは以下のリポジトリで公開しています。
参考資料
- Technical Q&A QA1913: Accessing Audio Files in Asset Catalogs
- NSDataAsset - UIKit
- AVAudioPlayer - AVFoundation
- AVPlayerViewController - AVKit
- カタログからどんどんアセットが出てくる - Qiita
- Accessing audio (and other) files stored in the Xcode asset catalog with Swift · Home
- iOS 10 Video Playback using AVPlayer and AVPlayerViewController
- [iOS] iOSで動画を再生する4つの方法
- ios - FileManager.createDirectory fails with NSCocoaErrorDomain Code: 518 - Stack Overflow